home *** CD-ROM | disk | FTP | other *** search
/ Cre@te Online 2000 December / Cre@teOnline CD05.iso / MacSoft / XML ConsoleMax.sea / XML ConsoleMax / Required / swingall.jar / javax / swing / MenuSelectionManager.class (.txt) < prev    next >
Encoding:
Java Class File  |  1999-07-15  |  6.9 KB  |  314 lines

  1. package javax.swing;
  2.  
  3. import java.awt.AWTEvent;
  4. import java.awt.Component;
  5. import java.awt.Point;
  6. import java.awt.Rectangle;
  7. import java.awt.event.InputEvent;
  8. import java.awt.event.KeyEvent;
  9. import java.awt.event.MouseEvent;
  10. import java.util.EventObject;
  11. import java.util.Vector;
  12. import javax.swing.event.ChangeEvent;
  13. import javax.swing.event.ChangeListener;
  14. import javax.swing.event.EventListenerList;
  15.  
  16. public class MenuSelectionManager {
  17.    private static final MenuSelectionManager instance = new MenuSelectionManager();
  18.    Vector selection = new Vector();
  19.    protected transient ChangeEvent changeEvent = null;
  20.    protected EventListenerList listenerList = new EventListenerList();
  21.    // $FF: synthetic field
  22.    static Class class$javax$swing$event$ChangeListener;
  23.  
  24.    public void addChangeListener(ChangeListener var1) {
  25.       this.listenerList.add(class$javax$swing$event$ChangeListener != null ? class$javax$swing$event$ChangeListener : (class$javax$swing$event$ChangeListener = class$("javax.swing.event.ChangeListener")), var1);
  26.    }
  27.  
  28.    // $FF: synthetic method
  29.    static Class class$(String var0) {
  30.       try {
  31.          return Class.forName(var0);
  32.       } catch (ClassNotFoundException var2) {
  33.          throw new NoClassDefFoundError(((Throwable)var2).getMessage());
  34.       }
  35.    }
  36.  
  37.    public void clearSelectedPath() {
  38.       this.setSelectedPath((MenuElement[])null);
  39.    }
  40.  
  41.    public Component componentForPoint(Component var1, Point var2) {
  42.       Point var5 = var2;
  43.       SwingUtilities.convertPointToScreen(var2, var1);
  44.       int var3 = var2.x;
  45.       int var4 = var2.y;
  46.       Vector var16 = (Vector)this.selection.clone();
  47.       int var17 = var16.size();
  48.  
  49.       for(int var6 = var17 - 1; var6 >= 0; --var6) {
  50.          MenuElement var14 = (MenuElement)var16.elementAt(var6);
  51.          MenuElement[] var15 = var14.getSubElements();
  52.          int var8 = 0;
  53.  
  54.          for(int var9 = var15.length; var8 < var9; ++var8) {
  55.             if (var15[var8] != null) {
  56.                Component var10 = var15[var8].getComponent();
  57.                if (var10.isShowing()) {
  58.                   int var12;
  59.                   int var13;
  60.                   if (var10 instanceof JComponent) {
  61.                      var12 = ((JComponent)var10).getWidth();
  62.                      var13 = ((JComponent)var10).getHeight();
  63.                   } else {
  64.                      Rectangle var11 = var10.getBounds();
  65.                      var12 = var11.width;
  66.                      var13 = var11.height;
  67.                   }
  68.  
  69.                   var5.x = var3;
  70.                   var5.y = var4;
  71.                   SwingUtilities.convertPointFromScreen(var5, var10);
  72.                   if (var5.x >= 0 && var5.x < var12 && var5.y >= 0 && var5.y < var13) {
  73.                      return var10;
  74.                   }
  75.                }
  76.             }
  77.          }
  78.       }
  79.  
  80.       return null;
  81.    }
  82.  
  83.    public static MenuSelectionManager defaultManager() {
  84.       return instance;
  85.    }
  86.  
  87.    protected void fireStateChanged() {
  88.       Object[] var1 = this.listenerList.getListenerList();
  89.  
  90.       for(int var2 = var1.length - 2; var2 >= 0; var2 -= 2) {
  91.          if (var1[var2] == (class$javax$swing$event$ChangeListener != null ? class$javax$swing$event$ChangeListener : (class$javax$swing$event$ChangeListener = class$("javax.swing.event.ChangeListener")))) {
  92.             if (this.changeEvent == null) {
  93.                this.changeEvent = new ChangeEvent(this);
  94.             }
  95.  
  96.             ((ChangeListener)var1[var2 + 1]).stateChanged(this.changeEvent);
  97.          }
  98.       }
  99.  
  100.    }
  101.  
  102.    public MenuElement[] getSelectedPath() {
  103.       MenuElement[] var1 = new MenuElement[this.selection.size()];
  104.       int var2 = 0;
  105.  
  106.       for(int var3 = this.selection.size(); var2 < var3; ++var2) {
  107.          var1[var2] = (MenuElement)this.selection.elementAt(var2);
  108.       }
  109.  
  110.       return var1;
  111.    }
  112.  
  113.    public boolean isComponentPartOfCurrentMenu(Component var1) {
  114.       if (this.selection.size() > 0) {
  115.          MenuElement var2 = (MenuElement)this.selection.elementAt(0);
  116.          return this.isComponentPartOfCurrentMenu(var2, var1);
  117.       } else {
  118.          return false;
  119.       }
  120.    }
  121.  
  122.    private boolean isComponentPartOfCurrentMenu(MenuElement var1, Component var2) {
  123.       if (var1 == null) {
  124.          return false;
  125.       } else if (var1.getComponent() == var2) {
  126.          return true;
  127.       } else {
  128.          MenuElement[] var3 = var1.getSubElements();
  129.          int var4 = 0;
  130.  
  131.          for(int var5 = var3.length; var4 < var5; ++var4) {
  132.             if (this.isComponentPartOfCurrentMenu(var3[var4], var2)) {
  133.                return true;
  134.             }
  135.          }
  136.  
  137.          return false;
  138.       }
  139.    }
  140.  
  141.    private void printMenuElementArray(MenuElement[] var1) {
  142.       this.printMenuElementArray(var1, false);
  143.    }
  144.  
  145.    private void printMenuElementArray(MenuElement[] var1, boolean var2) {
  146.       System.out.println("Path is(");
  147.       int var3 = 0;
  148.  
  149.       for(int var4 = var1.length; var3 < var4; ++var3) {
  150.          for(int var5 = 0; var5 <= var3; ++var5) {
  151.             System.out.print("  ");
  152.          }
  153.  
  154.          MenuElement var6 = var1[var3];
  155.          if (var6 instanceof JMenuItem) {
  156.             System.out.println(((JMenuItem)var6).getText() + ", ");
  157.          } else if (var6 instanceof JMenuBar) {
  158.             System.out.println("JMenuBar, ");
  159.          } else if (var6 instanceof JPopupMenu) {
  160.             System.out.println("JPopupMenu, ");
  161.          } else if (var6 == null) {
  162.             System.out.println("NULL , ");
  163.          } else {
  164.             System.out.println(var6 + ", ");
  165.          }
  166.       }
  167.  
  168.       System.out.println(")");
  169.       if (var2) {
  170.          Thread.dumpStack();
  171.       }
  172.  
  173.    }
  174.  
  175.    public void processKeyEvent(KeyEvent var1) {
  176.       Vector var2 = (Vector)this.selection.clone();
  177.       int var3 = var2.size();
  178.  
  179.       for(int var4 = var3 - 1; var4 >= 0; --var4) {
  180.          MenuElement var7 = (MenuElement)var2.elementAt(var4);
  181.          MenuElement[] var8 = var7.getSubElements();
  182.          MenuElement[] var9 = null;
  183.          int var5 = 0;
  184.  
  185.          for(int var6 = var8.length; var5 < var6; ++var5) {
  186.             if (var8[var5] != null) {
  187.                Component var10 = var8[var5].getComponent();
  188.                if (var10.isShowing()) {
  189.                   if (var9 == null) {
  190.                      var9 = new MenuElement[var4 + 2];
  191.  
  192.                      for(int var11 = 0; var11 <= var4; ++var11) {
  193.                         var9[var11] = (MenuElement)var2.elementAt(var11);
  194.                      }
  195.                   }
  196.  
  197.                   var9[var4 + 1] = var8[var5];
  198.                   var8[var5].processKeyEvent(var1, var9, this);
  199.                   if (((InputEvent)var1).isConsumed()) {
  200.                      return;
  201.                   }
  202.                }
  203.             }
  204.          }
  205.       }
  206.  
  207.    }
  208.  
  209.    public void processMouseEvent(MouseEvent var1) {
  210.       Point var4 = var1.getPoint();
  211.       Component var18 = (Component)((EventObject)var1).getSource();
  212.       if (var18.isShowing()) {
  213.          int var19 = ((AWTEvent)var1).getID();
  214.          int var20 = ((InputEvent)var1).getModifiers();
  215.          if (var19 != 504 && var19 != 505 || (var20 & 28) == 0) {
  216.             SwingUtilities.convertPointToScreen(var4, var18);
  217.             int var2 = var4.x;
  218.             int var3 = var4.y;
  219.             Vector var16 = (Vector)this.selection.clone();
  220.             int var17 = var16.size();
  221.             boolean var21 = false;
  222.  
  223.             for(int var5 = var17 - 1; var5 >= 0 && !var21; --var5) {
  224.                MenuElement var13 = (MenuElement)var16.elementAt(var5);
  225.                MenuElement[] var14 = var13.getSubElements();
  226.                MenuElement[] var15 = null;
  227.                int var7 = 0;
  228.  
  229.                for(int var8 = var14.length; var7 < var8 && !var21; ++var7) {
  230.                   if (var14[var7] != null) {
  231.                      Component var9 = var14[var7].getComponent();
  232.                      if (var9.isShowing()) {
  233.                         int var11;
  234.                         int var12;
  235.                         if (var9 instanceof JComponent) {
  236.                            var11 = ((JComponent)var9).getWidth();
  237.                            var12 = ((JComponent)var9).getHeight();
  238.                         } else {
  239.                            Rectangle var10 = var9.getBounds();
  240.                            var11 = var10.width;
  241.                            var12 = var10.height;
  242.                         }
  243.  
  244.                         var4.x = var2;
  245.                         var4.y = var3;
  246.                         SwingUtilities.convertPointFromScreen(var4, var9);
  247.                         if (var4.x >= 0 && var4.x < var11 && var4.y >= 0 && var4.y < var12) {
  248.                            if (var15 == null) {
  249.                               var15 = new MenuElement[var5 + 2];
  250.  
  251.                               for(int var22 = 0; var22 <= var5; ++var22) {
  252.                                  var15[var22] = (MenuElement)var16.elementAt(var22);
  253.                               }
  254.                            }
  255.  
  256.                            var15[var5 + 1] = var14[var7];
  257.                            MenuElement[] var23 = this.getSelectedPath();
  258.                            if (var23[var23.length - 1] != var15[var5 + 1] && var23[var23.length - 2] != var15[var5 + 1]) {
  259.                               Component var24 = var23[var23.length - 1].getComponent();
  260.                               MouseEvent var25 = new MouseEvent(var24, 505, ((InputEvent)var1).getWhen(), ((InputEvent)var1).getModifiers(), var4.x, var4.y, var1.getClickCount(), var1.isPopupTrigger());
  261.                               var23[var23.length - 1].processMouseEvent(var25, var15, this);
  262.                               MouseEvent var26 = new MouseEvent(var9, 504, ((InputEvent)var1).getWhen(), ((InputEvent)var1).getModifiers(), var4.x, var4.y, var1.getClickCount(), var1.isPopupTrigger());
  263.                               var14[var7].processMouseEvent(var26, var15, this);
  264.                            }
  265.  
  266.                            MouseEvent var27 = new MouseEvent(var9, ((AWTEvent)var1).getID(), ((InputEvent)var1).getWhen(), ((InputEvent)var1).getModifiers(), var4.x, var4.y, var1.getClickCount(), var1.isPopupTrigger());
  267.                            var14[var7].processMouseEvent(var27, var15, this);
  268.                            var21 = true;
  269.                            ((InputEvent)var1).consume();
  270.                         }
  271.                      }
  272.                   }
  273.                }
  274.             }
  275.  
  276.          }
  277.       }
  278.    }
  279.  
  280.    public void removeChangeListener(ChangeListener var1) {
  281.       this.listenerList.remove(class$javax$swing$event$ChangeListener != null ? class$javax$swing$event$ChangeListener : (class$javax$swing$event$ChangeListener = class$("javax.swing.event.ChangeListener")), var1);
  282.    }
  283.  
  284.    public void setSelectedPath(MenuElement[] var1) {
  285.       int var4 = this.selection.size();
  286.       int var5 = 0;
  287.       if (var1 == null) {
  288.          var1 = new MenuElement[0];
  289.       }
  290.  
  291.       int var2 = 0;
  292.  
  293.       for(int var3 = var1.length; var2 < var3 && var2 < var4 && (MenuElement)this.selection.elementAt(var2) == var1[var2]; ++var2) {
  294.          ++var5;
  295.       }
  296.  
  297.       for(int var6 = var4 - 1; var6 >= var5; --var6) {
  298.          ((MenuElement)this.selection.elementAt(var6)).menuSelectionChanged(false);
  299.          this.selection.removeElementAt(var6);
  300.       }
  301.  
  302.       var2 = var5;
  303.  
  304.       for(int var8 = var1.length; var2 < var8; ++var2) {
  305.          if (var1[var2] != null) {
  306.             var1[var2].menuSelectionChanged(true);
  307.             this.selection.addElement(var1[var2]);
  308.          }
  309.       }
  310.  
  311.       this.fireStateChanged();
  312.    }
  313. }
  314.